#include "login.h"
#include <iostream>
#include <QPixmap>
using namespace std;
Login::Login(QString tmp)
{
    setupUi(this);
    this->setGeometry(400,200,468, 286);
    workDir=tmp;
    QString userListFile=workDir+"/users";
    QFile file(userListFile);
    if(file.open(QFile::ReadWrite))
    {
        QString tmp;
        QTextStream out(&file);
        while(!out.atEnd())
        {
            out>>tmp;
            userList<<tmp;
        }
    }
    file.close();
    this->setWindowTitle(tr("登录"));
    userNameComboBox->addItems(userList);
    this->setWindowFlags(Qt::FramelessWindowHint);
    this->UserNameSelected(userNameComboBox->currentText());
    //窗体透明化
    this->setAttribute(Qt::WA_TranslucentBackground, true);
    this->setWindowOpacity(0.9);

    cancelButton->setText(tr("注册"));
    //loginButton->setFlat(true);
    //cancelButton->setFlat(true);
    label->setStyleSheet("QLabel{border:0px;background-image:url(:/bg6.png);}");
    QPixmap s1("./mini.png");
    miniButton->setIcon(s1);
    miniButton->setStyleSheet("QPushButton{border-radius:10px;border:0px}");
    miniButton->setFlat(true);
    QPixmap s2("./close.png");
    closeButton->setIcon(s2);
    closeButton->setStyleSheet("QPushButton{border-radius:10px;border:0px}");
    //connect(pushButton,SIGNAL(clicked()),this,SLOT(regist()));

    userNameComboBox->setFocus();
    passWdEdit->setEchoMode(QLineEdit::Password);

    connect(loginButton,SIGNAL(clicked()),this,SLOT(login()));
    connect(cancelButton,SIGNAL(clicked()),this,SLOT(Regist()));
    connect(miniButton,SIGNAL(clicked()),this,SLOT(showMinimized()));
    connect(closeButton,SIGNAL(clicked()),this,SLOT(close()));
    connect(userNameComboBox,SIGNAL(activated(QString)),this,SLOT(UserNameSelected(QString)));
}
void Login::login()
{
    //连接服务器
    this->hide();
    emit startWait();
    if(this->checkBox_2->isChecked())
    {
        if(this->checkBox->isChecked())
            LT=new LoginThread(userNameComboBox->currentText(),passWdEdit->text(),workDir,true,true);
        else
            LT=new LoginThread(userNameComboBox->currentText(),passWdEdit->text(),workDir,true,false);
    }
    else
    {
        if(this->checkBox->isChecked())
            LT=new LoginThread(userNameComboBox->currentText(),passWdEdit->text(),workDir,false,true);
        else
            LT=new LoginThread(userNameComboBox->currentText(),passWdEdit->text(),workDir,false,false);
    }
    connect(LT,SIGNAL(loginFailed(int)),this,SLOT(logFailed(int)));
    connect(LT,SIGNAL(hasloged(int,QString)),this,SLOT(logSucessed(int,QString)));
    LT->start();
//    ctl_sock = tcp_connect(SRV_IP,SRV_CTL_PORT);
//    if(ctl_sock < 0)
//    {
//        sleep(5);
//        ctl_sock = tcp_connect(SRV_IP,SRV_CTL_PORT);
//        if(ctl_sock<0)
//        {
//            sleep(5);
//            ctl_sock = tcp_connect(SRV_IP,SRV_CTL_PORT);
//            if(ctl_sock<0)
//            {
//                sleep(5);
//                ctl_sock = tcp_connect(SRV_IP,SRV_CTL_PORT);
//                if(ctl_sock<0)
//                {
//                    perror("login cant reach server");
//                    QErrorMessage err_msg;
//                    err_msg.setWindowTitle("Error:");
//                    err_msg.showMessage(tr("无法连接到服务器"));
//                    err_msg.exec();
//                    emit waitFinish();
//                    this->show();
//                    return;
//                }
//            }
//        }
//    }
//        //打包
//        ctl_pkg_t info;
//        info.type = LOGIN;
//        strncpy(info.str.id.usr,userNameComboBox->currentText().toStdString().c_str(),USR_LEN);
//        strncpy(info.str.id.pwd,passWdEdit->text().toStdString().c_str(),PWD_LEN);
//
//        //发送给服务器
//        if( writen(ctl_sock,&info,sizeof(ctl_pkg_t)) < 0 )
//        {
//            QErrorMessage err_msg(this);
//            err_msg.setWindowTitle(tr("错误"));
//            err_msg.showMessage(tr("无法发送用户信息到服务器"));
//            err_msg.exec();
//            emit waitFinish();
//            this->show();
//            ::close(ctl_sock);
//            return;
//        }
//
//        //读取服务器的应答
//        int8_t reply;
//        if( readn(ctl_sock,&reply,sizeof(reply)) < 0 )
//        {
//            QErrorMessage err_msg(this);
//            err_msg.setWindowTitle(tr("错误"));
//            err_msg.showMessage(tr("无法获得服务器信息"));
//            err_msg.exec();
//            emit waitFinish();
//            this->show();
//            ::close(ctl_sock);
//            return;
//        }
//
//        //reply<0说明登录失败
//        if (reply != 0)
//        {
//            QErrorMessage err_msg(this);
//            err_msg.setWindowTitle(tr("错误"));
//            err_msg.showMessage(tr("用户名或密码错误"));
//            err_msg.exec();
//            emit waitFinish();
//            this->show();
//            ::close(ctl_sock);
//            return;
//        }
//
//
//        //将用户信息存到passwd文件，下次用这个用户自动登录
//        QString userName=userNameComboBox->currentText();
//        QString passFilePath=workDir+"/.passwd";
//        QFile passFile(passFilePath);
//        if(passFile.open(QFile::WriteOnly))
//        {
//            cout<<"if1"<<endl;
//            QTextStream in(&passFile);
//            if(checkBox_2->isChecked())
//                in<<1<<"\n";
//            else
//                in<<0<<"\n";
//            in<<userName<<"\n";
//            in<<passWdEdit->text()<<"\n";
//        }
//        passFile.close();
//
//        //看本地有没有用户文件，如果没有，新建该用户文件，如果有该用户，改写
//        //QString userFile=workDir+"/"+userName;
//        QString userDir=workDir+"/"+userName;
//        cout<<userDir.toStdString()<<endl;
//        QDir testUserDir;
//        if(!testUserDir.exists(userDir))
//        {
//            testUserDir.mkpath(userDir);
//            cout<<"fsd"<<endl;
//            userList<<userName<<"\n";
//            QString userListFile=workDir+"/users";
//            QFile File(userListFile);
//            if(File.open(QFile::WriteOnly|QFile::Append))
//            {
//                cout<<"here"<<endl;
//                QTextStream in(&File);
//                in<<userName<<"\n";
//            }
//            File.close();
//
//            QString userHomeDir;
//            userHomeDir=QDir::homePath()+"/"+"GeeBox/"+userName;
//            testUserDir.mkpath(userHomeDir);
//            QString userFile=userDir+"/"+userName;
//            QFile file(userFile);
//            if(file.open(QFile::WriteOnly))
//            {
//                QTextStream in(&file);
//                if(checkBox->isChecked())
//                {
//                    in<<1<<"\n";
//                    in<<passWdEdit->text()<<"\n";
//                }
//                else
//                {
//                    in<<0<<"\n";
//                    in<<passWdEdit->text()<<"\n";
//                }
//                in<<userHomeDir<<"\n";
//            }
//            file.close();
//
//            //为新用户创建版本文件
//            QString versionFilePath=userDir+"/.version";
//            QFile versionFile(versionFilePath);
//            if(versionFile.open(QFile::WriteOnly))
//            {
//                QTextStream in(&versionFile);
//                in<<int(0)<<"\n";
//            }
//            versionFile.close();
//        }
//        else//已经有了这个用户修改用户的信息
//        {
//            QString userFile=userDir+"/"+userName;
//            QFile file(userFile);
//            int tmp;
//            QString tmpPasswd;
//            QString tmpUserDir;
//            if(file.open(QFile::ReadOnly))
//            {
//                QTextStream in(&file);
//                in>>tmp;
//                in>>tmpPasswd;
//                in>>tmpUserDir;
//            }
//            file.close();
//            if(file.open(QFile::WriteOnly))
//            {
//                QTextStream out(&file);
//                if(checkBox->isChecked())
//                {
//                    out<<1<<"\n";
//                }
//                else
//                {
//                    out<<0<<"\n";
//                }
//                out<<tmpPasswd<<"\n";
//                out<<tmpUserDir<<"\n";
//            }
//            file.close();
//        }
//
//        cout<<"finish"<<endl;
//        //登录完成，开始进行初始化
//        emit hasloged(ctl_sock,userName);
//        emit waitFinish();
}


void Login::closeEvent(QCloseEvent *event)
{
    this->hide();
    //event->ignore();
}
void Login::UserNameSelected(QString name)
{
    passWdEdit->clear();
    if(name.size()!=0)
    {
        QString filename=workDir;
        filename.append("/").append(name).append("/").append(name);
        QFile file(filename);
        if(file.open(QFile::ReadOnly))
        {
            int tmp;
            QString tmpPasswd;
            QTextStream in(&file);
            in>>tmp;
            if(tmp==1)
            {
                in>>tmpPasswd;
                this->passWdEdit->setText(tmpPasswd);

            }
        }
        this->passWdEdit->setFocus();
    }
}

void Login::mousePressEvent(QMouseEvent * event)
{
    if (event->button() == Qt::LeftButton) //点击左边鼠标
    {
         dragPosition = event->globalPos() - frameGeometry().topLeft();
         //globalPos()获取根窗口的相对路径，frameGeometry().topLeft()获取主窗口左上角的位置
         event->accept();   //鼠标事件被系统接收
    }
    if (event->button() == Qt::RightButton)
    {
         close();
    }
}

void Login::mouseMoveEvent(QMouseEvent * event)
{
    if (event->buttons() == Qt::LeftButton) //当满足鼠标左键被点击时。
    {
         move(event->globalPos() - dragPosition);//移动窗口
         event->accept();
    }
}
void Login::Regist()
{
    this->rig=new Rigist();
    rig->show();
}
void Login::logFailed(int a)
{
    if(a==1)//无法连接到服务器
    {
        QErrorMessage err_msg(this);
        err_msg.setWindowTitle(tr("错误"));
        err_msg.showMessage(tr("无法连接到服务器"));
        err_msg.exec();
    }
    else if(a==2)
    {
        QErrorMessage err_msg(this);
        err_msg.setWindowTitle(tr("错误"));
        err_msg.showMessage(tr("无法发送用户信息到服务器"));
        err_msg.exec();
    }
    else if(a==3)
    {
        QErrorMessage err_msg(this);
        err_msg.setWindowTitle(tr("错误"));
        err_msg.showMessage(tr("无法获得服务器信息"));
        err_msg.exec();
    }
    else if(a==4)
    {
        QErrorMessage err_msg(this);
        err_msg.setWindowTitle(tr("错误"));
        err_msg.showMessage(tr("用户名或密码错误"));
        err_msg.exec();
    }
    emit this->waitFinish();
    this->show();
}
void Login::logSucessed(int fd, QString userName)
{
    emit this->hasloged(fd,userName);
    emit this->waitFinish();
}
